# $Id: Makefile 9120 2006-08-28 13:01:07Z vlad $

all:
.PHONY: all kernel user install_kernel install_modules install_user install clean clean_kernel clean_user uninstall
.PHONY: libibverbs libmthca libibcm perftest mstflint libsdp libibcommon libibumad libibmad osm diags mpi
.PHONY: librdmacm install_librdmacm dapl dat tvflash install_tvflash
.PHONY: install_libibverbs install_libmthca install_libibcm install_libsdp libibcommon
.PHONY: libipathverbs install_libipathverbs libehca install_libehca
.PHONY: install_libibumad install_libibmad install_osm install_diags install_mstflint install_perftest
.PHONY: srptools install_srptools ipoibtools install_ipoibtools
	
.DELETE_ON_ERROR:

include ./configure.mk

DEPMOD  = /sbin/depmod
SRC	= src/
	
src_diags_LDADD="../libibcommon/libibcommon.la ../libibumad/libibumad.la ../libibmad/libibmad.la"
src_diags_DEPENDENCIES=

ifeq ($(WITH_MEMTRACK),yes)
        export KERNEL_MEMTRACK_CFLAGS = -include $(CWD)/drivers/infiniband/debug/mtrack.h
else
        export KERNEL_MEMTRACK_CFLAGS =
endif

configure.mk:
	@echo Please run ./configure
	@exit 1

all: kernel user 

install: install_kernel install_user 

#########################
#	make kernel	#
#########################
#NB: The LINUXINCLUDE value comes from main kernel Makefile
#    with local directories prepended. This eventually affects
#    CPPFLAGS in the kernel Makefile
kernel:
	@echo "Building kernel modules"
	@echo "Kernel version: $(KVERSION)"
	@echo "Modules directory: $(DESTDIR)/$(MODULES_DIR)"
	@echo "Kernel sources: $(KSRC)"
	env EXTRA_CFLAGS="$(OPENIB_KERNEL_EXTRA_CFLAGS) $(KERNEL_MEMTRACK_CFLAGS) -I$(CWD)/include -I$(CWD)/drivers/infiniband/include \
		-I$(CWD)/drivers/infiniband/ulp/ipoib \
		-I$(CWD)/drivers/infiniband/debug" \
    	$(MAKE) -C $(KSRC) SUBDIRS="$(CWD)/drivers/infiniband" KERNELRELEASE=$(KVERSION) \
		EXTRAVERSION=$(EXTRAVERSION) V=1 $(WITH_MAKE_PARAMS) \
		CONFIG_INFINIBAND=$(CONFIG_INFINIBAND) \
		CONFIG_INFINIBAND_IPOIB=$(CONFIG_INFINIBAND_IPOIB) \
		CONFIG_INFINIBAND_SDP=$(CONFIG_INFINIBAND_SDP) \
		CONFIG_INFINIBAND_SRP=$(CONFIG_INFINIBAND_SRP) \
		CONFIG_INFINIBAND_USER_MAD=$(CONFIG_INFINIBAND_USER_MAD) \
		CONFIG_INFINIBAND_USER_ACCESS=$(CONFIG_INFINIBAND_USER_ACCESS) \
		CONFIG_INFINIBAND_ADDR_TRANS=$(CONFIG_INFINIBAND_ADDR_TRANS) \
		CONFIG_INFINIBAND_MTHCA=$(CONFIG_INFINIBAND_MTHCA) \
		CONFIG_INFINIBAND_IPOIB_DEBUG=$(CONFIG_INFINIBAND_IPOIB_DEBUG) \
		CONFIG_INFINIBAND_ISER=$(CONFIG_INFINIBAND_ISER) \
		CONFIG_INFINIBAND_EHCA=$(CONFIG_INFINIBAND_EHCA) \
		CONFIG_INFINIBAND_EHCA_SCALING=$(CONFIG_INFINIBAND_EHCA_SCALING) \
		CONFIG_INFINIBAND_RDS=$(CONFIG_INFINIBAND_RDS) \
		CONFIG_INFINIBAND_RDS_DEBUG=$(CONFIG_INFINIBAND_RDS_DEBUG) \
		CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=$(CONFIG_INFINIBAND_IPOIB_DEBUG_DATA) \
		CONFIG_INFINIBAND_SDP_SEND_ZCOPY=$(CONFIG_INFINIBAND_SDP_SEND_ZCOPY) \
		CONFIG_INFINIBAND_SDP_RECV_ZCOPY=$(CONFIG_INFINIBAND_SDP_RECV_ZCOPY) \
		CONFIG_INFINIBAND_SDP_DEBUG=$(CONFIG_INFINIBAND_SDP_DEBUG) \
		CONFIG_INFINIBAND_SDP_DEBUG_DATA=$(CONFIG_INFINIBAND_SDP_DEBUG_DATA) \
		CONFIG_INFINIBAND_IPATH=$(CONFIG_INFINIBAND_IPATH) \
		CONFIG_INFINIBAND_MTHCA_DEBUG=$(CONFIG_INFINIBAND_MTHCA_DEBUG) \
   		CONFIG_INFINIBAND_MADEYE=$(CONFIG_INFINIBAND_MADEYE) \
		LINUXINCLUDE='-I$(CWD)/include \
		-I$(CWD)/drivers/infiniband/include \
		-Iinclude \
		$$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) \
		-include include/linux/autoconf.h \
		-include $(CWD)/include/linux/autoconf.h \
		' \
		modules


#########################
#	user level	#
#########################
ifeq ($(WITH_IBVERBS),yes)
user:	libibverbs
install_user:	install_libibverbs
endif

ifeq ($(WITH_MTHCA),yes)
user:	libmthca
install_user:	install_libmthca
endif

ifeq ($(WITH_IPATHVERBS),yes)
user:	libipathverbs
install_user:	install_libipathverbs
endif

ifeq ($(WITH_EHCA),yes)
user:	libehca
install_user:	install_libehca
endif

ifeq ($(WITH_CM),yes)
user:	libibcm
install_user:	install_libibcm
endif

ifeq ($(WITH_PERFTEST),yes)
user:	perftest
install_user:	install_perftest
endif

ifeq ($(WITH_SRPTOOLS),yes)
user:	srptools
install_user:	install_srptools
endif

ifeq ($(WITH_IPOIBTOOLS),yes)
user:	ipoibtools
install_user:	install_ipoibtools
endif

ifeq ($(WITH_TVFLASH),yes)
user:	tvflash
install_user:	install_tvflash
endif

ifeq ($(WITH_MSTFLINT),yes)
user:	mstflint
install_user:	install_mstflint
endif

ifeq ($(WITH_SDP),yes)
user:	libsdp
install_user:	install_libsdp
endif

ifeq ($(WITH_MANAGEMENT_LIBS),yes)
user:	libibcommon libibumad libibmad
install_user:	install_libibcommon install_libibumad install_libibmad
endif

ifeq ($(WITH_OSM),yes)
user:	osm
install_user:	install_osm
endif

ifeq ($(WITH_DIAGS),yes)
user:	diags
install_user:	install_diags
endif

ifeq ($(WITH_RDMACM),yes)
user:	librdmacm
install_user:	install_librdmacm
endif

ifeq ($(WITH_DAPL),yes)
user:	dapl
install_user:	install_dapl
endif

ifeq ($(WITH_MPI),yes)
user:	mpi
install_user:	install_mpi
endif

#########################
#	make user	#
#########################
user:
	@echo "Building user level applications"
	
libibverbs:
	$(MAKE) -C $(SRC)userspace/libibverbs
	@echo "Make libibverbs done"
	
libmthca: libibverbs
	$(MAKE) -C $(SRC)userspace/libmthca \
	AM_LDFLAGS="-L../libibverbs/src -libverbs"
	@echo "Make libmthca done"
	
libipathverbs: libibverbs
	$(MAKE) -C $(SRC)userspace/libipathverbs \
	AM_LDFLAGS="-L../libibverbs/src -libverbs"
	@echo "Make libipathverbs done"
	
libehca: libibverbs
	$(MAKE) -C $(SRC)userspace/libehca \
	AM_LDFLAGS="-L../libibverbs/src -libverbs"
	@echo "Make libehca done"

libibcm: libibverbs
	$(MAKE) -C $(SRC)userspace/libibcm \
	CPPFLAGS="-I../libibverbs/include" \
	AM_LDFLAGS="-L../libibverbs/src -libverbs -lsysfs"
	@echo "Make libibcm done"


	# $(MAKE) -C $(SRC)userspace/useraccess-lib
perftest: libibverbs librdmacm
	$(MAKE) -C $(SRC)userspace/perftest \
	CPPFLAGS="-I../libibverbs/include -I../librdmacm/include" \
	LDFLAGS="-L../libibverbs/src/.libs -libverbs -L../librdmacm/src/.libs -lrdmacm"
	@echo "Make perftest done"

srptools: libibverbs libibumad libibcommon
	$(MAKE) -C $(SRC)userspace/srptools \
	CPPFLAGS="-I../libibverbs/include -I../management/libibumad/include -I../management/libibcommon/include" \
    	AM_LDFLAGS="-L../libibverbs/src/.libs -libverbs \
    	-L../management/libibumad/.libs -libumad \
	    -L../management/libibcommon/.libs -libcommon"
	@echo "Make srptools done"

ipoibtools:
	$(MAKE) -C $(SRC)userspace/ipoibtools
	$(MAKE) -C $(SRC)userspace/ipoibtools/iproute2 ip
	@echo "Make ipoibtools done"
    
tvflash:
	$(MAKE) -C $(SRC)userspace/tvflash
	@echo "Make tvflash done"

mstflint:
	$(MAKE) -C $(SRC)userspace/mstflint
	@echo "Make mstflint done"

libsdp:
	$(MAKE) -C $(SRC)userspace/libsdp
	@echo "Make libsdp done"
	
libibcommon:
	$(MAKE) -C $(SRC)userspace/management/libibcommon
	@echo "Make libibcommon done"

libibumad: libibverbs libibcommon
	$(MAKE) -C $(SRC)userspace/management/libibumad \
	CPPFLAGS="-I../../libibverbs/include -I../libibcommon/include" \
	AM_LDFLAGS="-L../libibcommon -libcommon"
	@echo "Make libibumad done"

libibmad: libibcommon libibumad
	$(MAKE) -C $(SRC)userspace/management/libibmad \
	CPPFLAGS="-I../libibcommon/include -I../libibumad/include" \
	AM_LDFLAGS="-L../libibcommon -libcommon -L../libibumad -libumad"
	@echo "Make libibmad done"

osm: libibcommon libibumad
	@echo "Making opensm"
	$(MAKE) -C $(SRC)userspace/management/osm \
	CPPFLAGS="-I../../libibcommon/include -I../../libibumad/include" \
	AM_LDFLAGS="-L../../libibcommon -libcommon -L../../libibumad -libumad"
	@echo "Make osm done"

diags: libibcommon libibumad libibmad osm
	# W/A to build saquery
	cd $(SRC)userspace/management/osm ; \
	ln -s include infiniband; \
	cd -
	$(MAKE) -C $(SRC)userspace/management/diags/ \
	src_ibaddr_LDADD=$(src_diags_LDADD) \
	src_ibnetdiscover_LDADD=$(src_diags_LDADD) \
	src_ibping_LDADD=$(src_diags_LDADD) \
	src_ibportstate_LDADD=$(src_diags_LDADD) \
	src_ibroute_LDADD=$(src_diags_LDADD) \
	src_ibstat_LDADD=$(src_diags_LDADD) \
	src_ibsysstat_LDADD=$(src_diags_LDADD) \
	src_ibtracert_LDADD=$(src_diags_LDADD) \
	src_perfquery_LDADD=$(src_diags_LDADD) \
	src_sminfo_LDADD=$(src_diags_LDADD) \
	src_smpdump_LDADD=$(src_diags_LDADD) \
	src_smpquery_LDADD=$(src_diags_LDADD) \
	src_saquery_LDADD=$(src_diags_LDADD) \
	src_ibaddr_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibnetdiscover_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibping_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibportstate_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibroute_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibstat_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibsysstat_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibtracert_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_perfquery_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_sminfo_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_smpdump_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_smpquery_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_saquery_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	INCLUDES="-I./include -I../osm -I../osm/include -I./../libibcommon/include -I./../libibumad/include -I./../libibmad/include \
	-I./../libibcommon/include/infiniband -I./../libibumad/include/infiniband -I./../libibmad/include/infiniband" \
	CPPFLAGS="-I../libibcommon/include -I../libibumad/include" \
	AM_LDFLAGS="-L../libibcommon -libcommon -L../libibumad -libumad -L../osm/opensm -lopensm -L../osm/libvendor -losmvendor -L../osm/complib -losmcomp"
	@echo "Make diags done"

librdmacm: libibverbs
	$(MAKE) -C $(SRC)userspace/librdmacm \
	CPPFLAGS="-I../libibverbs/include" \
	AM_LDFLAGS="-L../libibverbs/src -libverbs -lsysfs"
	@echo "Make librdmacm done"

dapl: libibverbs librdmacm
	$(MAKE) -C $(SRC)userspace/dapl \
	CPPFLAGS="-I../libibverbs/include/infiniband -I../librdmacm/include \
	-I../libibverbs/include" \
	AM_LDFLAGS="-L../libibverbs/src -libverbs -L../librdmacm/src/ -lrdmacm -lsysfs"
	@echo "Make dapl done"

mpi:
	@echo


#########################
#	Install kernel	#
#########################
install_kernel: copy_kernel

	$(DEPMOD) -r -ae $(KVERSION)

install_modules: kernel
	@echo "Installing kernel modules"
	
	$(MAKE) -C $(KSRC) SUBDIRS="$(CWD)/drivers/infiniband" \
		KERNELRELEASE=$(KVERSION) EXTRAVERSION=$(EXTRAVERSION) \
		INSTALL_MOD_DIR="infiniband" INSTALL_MOD_PATH=$(CWD) \
		$(WITH_MAKE_PARAMS) modules_install

	# Backup original infiniband kernel modules
	# under 'prefix'/backup directory
	
	if [ -d $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband ]; then \
		mkdir -p $(DESTDIR)/$(prefix)/backup; \
		if [ ! -f $(DESTDIR)/$(prefix)/backup/infiniband_ko-$(KVERSION).tgz ]; then \
			/bin/rm -f $(DESTDIR)/$(prefix)/backup/infko_tmp.tgz; \
			tar czfP $(DESTDIR)/$(prefix)/backup/infko_tmp.tgz $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband; \
			mv $(DESTDIR)/$(prefix)/backup/infko_tmp.tgz $(DESTDIR)/$(prefix)/backup/infiniband_ko-$(KVERSION).tgz; \
		fi; \
		/bin/rm -rf $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband; \
	fi
	
	# Copy new infiniband kernel modules to $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband
	if [ -d $(CWD)/lib/modules/$(KVERSION)/infiniband ]; then \
		mkdir -p $(DESTDIR)/$(MODULES_DIR)/kernel/drivers; \
		mv $(CWD)/lib/modules/$(KVERSION)/infiniband $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/; \
	fi
	if [ -d $(CWD)/lib/modules/$(KVERSION)/extra ]; then \
		mkdir -p $(DESTDIR)/$(MODULES_DIR)/kernel/drivers; \
		mv $(CWD)/lib/modules/$(KVERSION)/extra $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband; \
	fi

	$(DEPMOD) -r -ae $(KVERSION)

copy_kernel: kernel
	@echo "Installing kernel modules"
	
	$(MAKE) -C $(KSRC) SUBDIRS="$(CWD)/drivers/infiniband" \
		KERNELRELEASE=$(KVERSION) EXTRAVERSION=$(EXTRAVERSION) \
		INSTALL_MOD_DIR="infiniband" INSTALL_MOD_PATH=$(CWD) \
		$(WITH_MAKE_PARAMS) modules_install
	# Backup original infiniband kernel sources
	# under 'prefix'/backup directory
	if [ -d $(DESTDIR)/lib/modules/$(KVERSION)/source/drivers/infiniband ]; then \
		mkdir -p $(DESTDIR)/$(prefix)/backup; \
		if [ ! -f $(DESTDIR)/$(prefix)/backup/infiniband-$(KVERSION).tgz ]; then \
			/bin/rm -f $(DESTDIR)/$(prefix)/backup/inf_tmp.tgz; \
			tar czfP $(DESTDIR)/$(prefix)/backup/inf_tmp.tgz $(DESTDIR)/lib/modules/$(KVERSION)/source/drivers/infiniband; \
			mv $(DESTDIR)/$(prefix)/backup/inf_tmp.tgz $(DESTDIR)/$(prefix)/backup/infiniband-$(KVERSION).tgz; \
		fi; \
		/bin/rm -rf $(DESTDIR)/lib/modules/$(KVERSION)/source/drivers/infiniband; \
	fi
	
	# Backup original include/rdma directory and copy the new one
	if [ -d $(DESTDIR)/lib/modules/$(KVERSION)/source/include/rdma ] && \
		[ -d $(CWD)/drivers/infiniband/include/rdma ]; then \
		mkdir -p $(DESTDIR)/$(prefix)/backup; \
		if [ ! -f $(DESTDIR)/$(prefix)/backup/rdma-$(KVERSION).tgz.tgz ]; then \
			/bin/rm -f $(DESTDIR)/$(prefix)/backup/rdma_tmp.tgz; \
			tar czfP $(DESTDIR)/$(prefix)/backup/rdma_tmp.tgz $(DESTDIR)/lib/modules/$(KVERSION)/source/include/rdma; \
			mv $(DESTDIR)/$(prefix)/backup/rdma_tmp.tgz $(DESTDIR)/$(prefix)/backup/rdma-$(KVERSION).tgz; \
		fi; \
		/bin/rm -rf $(DESTDIR)/lib/modules/$(KVERSION)/source/include/rdma; \
	fi
	
	# Backup original scsi/srp.h file and copy the new one
	if [ -f $(DESTDIR)/lib/modules/$(KVERSION)/source/include/scsi/srp.h ] && \
		[ -f $(CWD)/drivers/infiniband/include/scsi/srp.h ]; then \
		mkdir -p $(DESTDIR)/$(prefix)/backup; \
		if [ ! -f $(DESTDIR)/$(prefix)/backup/srp-$(KVERSION).h ]; then \
			mv $(DESTDIR)/lib/modules/$(KVERSION)/source/include/scsi/srp.h $(DESTDIR)/$(prefix)/backup/srp-$(KVERSION).h; \
		fi; \
	fi

	# Backup original infiniband kernel modules
	# under 'prefix'/backup directory
	
	if [ -d $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband ]; then \
		mkdir -p $(DESTDIR)/$(prefix)/backup; \
		if [ ! -f $(DESTDIR)/$(prefix)/backup/infiniband_ko-$(KVERSION).tgz ]; then \
			/bin/rm -f $(DESTDIR)/$(prefix)/backup/infko_tmp.tgz; \
			tar czfP $(DESTDIR)/$(prefix)/backup/infko_tmp.tgz $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband; \
			mv $(DESTDIR)/$(prefix)/backup/infko_tmp.tgz $(DESTDIR)/$(prefix)/backup/infiniband_ko-$(KVERSION).tgz; \
		fi; \
		/bin/rm -rf $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband; \
	fi
	
	# Copy new infiniband kernel modules to $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband
	if [ -d $(CWD)/lib/modules/$(KVERSION)/infiniband ]; then \
		mkdir -p $(DESTDIR)/$(MODULES_DIR)/kernel/drivers; \
		mv $(CWD)/lib/modules/$(KVERSION)/infiniband $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/; \
	fi
	if [ -d $(CWD)/lib/modules/$(KVERSION)/extra ]; then \
		mkdir -p $(DESTDIR)/$(MODULES_DIR)/kernel/drivers; \
		mv $(CWD)/lib/modules/$(KVERSION)/extra $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband; \
	fi
	
	# Copy new infiniband kernel level sources (after running make clean) to /lib/modules/$(KVERSION)/source/drivers

##	# Clean ib kernel sources before copying them to the kernel source tree
##	$(MAKE) -C $(KSRC) SUBDIRS="$(CWD)/drivers/infiniband" KERNELRELEASE=$(KVERSION) EXTRAVERSION=$(EXTRAVERSION) $(WITH_MAKE_PARAMS) clean

#	mkdir -p $(DESTDIR)/lib/modules/$(KVERSION)/source/drivers
#	cp -a $(CWD)/drivers/infiniband $(DESTDIR)/lib/modules/$(KVERSION)/source/drivers

#	# Clean ib kernel sources after copying them to the kernel source tree
#       $(MAKE) -C $(KSRC) SUBDIRS="$(DESTDIR)/lib/modules/$(KVERSION)/source/drivers/infiniband" KERNELRELEASE=$(KVERSION) EXTRAVERSION=$(EXTRAVERSION) $(WITH_MAKE_PARAMS) clean

	find drivers/infiniband/ -type d -and -not -path '*/.*' -exec mkdir -p '$(DESTDIR)/lib/modules/$(KVERSION)/source/{}' ';'
	find drivers/infiniband/ '(' -name '*.c' -or -name '*.h' -or -name Makefile -or -name Kconfig ')' \
	-and -not -path '*/.*' \
	-exec cp -f '{}' '$(DESTDIR)/lib/modules/$(KVERSION)/source/{}' ';'


	if [ -d $(CWD)/drivers/infiniband/include/rdma ]; then \
		mkdir -p $(DESTDIR)/lib/modules/$(KVERSION)/source/include; \
		cp -a $(CWD)/drivers/infiniband/include/rdma $(DESTDIR)/lib/modules/$(KVERSION)/source/include; \
	fi
	if [ -f $(CWD)/drivers/infiniband/include/scsi/srp.h ]; then \
		mkdir -p $(DESTDIR)/lib/modules/$(KVERSION)/source/include/scsi; \
		cp -a $(CWD)/drivers/infiniband/include/scsi/srp.h $(DESTDIR)/lib/modules/$(KVERSION)/source/include/scsi; \
	fi

	@rm -rf $(CWD)/lib

#########################
#	Install user	#
#########################
install_user:

	@echo "Installing user level"
	# Copy uninstall script and configuretion files
	if [ -e uninstall.sh ]; then \
		mkdir -p $(DESTDIR)/$(prefix); \
		install -m 0755 uninstall.sh $(DESTDIR)/$(prefix)/uninstall_gen2.sh; \
	fi
    # @/sbin/ldconfig
	
install_libibverbs:
	$(MAKE) -C $(SRC)userspace/libibverbs install
	
install_libmthca:	install_libibverbs
	$(MAKE) -C $(SRC)userspace/libmthca install
	
install_libipathverbs:	install_libibverbs
	$(MAKE) -C $(SRC)userspace/libipathverbs install
	
install_libehca:	install_libibverbs
	$(MAKE) -C $(SRC)userspace/libehca install
	
install_libibcm:	install_libmthca
	$(MAKE) -C $(SRC)userspace/libibcm install
	
	# $(MAKE) -C $(SRC)userspace/useraccess-lib install
	# $(MAKE) -C $(SRC)userspace/perftest install
	# $(MAKE) -C $(SRC)userspace/mstflint install

install_libsdp:
	$(MAKE) -C $(SRC)userspace/libsdp install

	@echo "Installing management"

install_librdmacm:
	$(MAKE) -C $(SRC)userspace/librdmacm install

install_libibcommon:	
	$(MAKE) -C $(SRC)userspace/management/libibcommon install
	
install_libibumad:	install_libibverbs install_libibcommon
	$(MAKE) -C $(SRC)userspace/management/libibumad install

install_libibmad:	install_libibcommon install_libibumad
	$(MAKE) -C $(SRC)userspace/management/libibmad install

install_osm:	install_libibcommon install_libibumad
	$(MAKE) -C $(SRC)userspace/management/osm install \
	CFLAGS="-I../../libibumad/include -I../../libibcommon/include" \
	AM_LDFLAGS="-L../../libibumad"

#install_diags: $(foreach d, $(DIAGS), install_diags/${d})
#
#install_diags/%: install_libibcommon install_libibumad install_libibmad
#	$(MAKE) -C $(SRC)userspace/management/diags/$* install src_$*_DEPENDENCIES=

install_diags: install_libibcommon install_libibumad install_libibmad
	$(MAKE) -C $(SRC)userspace/management/diags install \
	src_ibaddr_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibnetdiscover_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibping_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibportstate_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibroute_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibstat_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibsysstat_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibtracert_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_perfquery_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_sminfo_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_smpdump_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_smpquery_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_saquery_DEPENDENCIES=$(src_diags_DEPENDENCIES)

	sed -i -e "s@/usr/local/bin@$(prefix)/bin@g" $(DESTDIR)/$(prefix)/bin/*

install_mstflint:
	install -d $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/mstflint/mread $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/mstflint/mwrite $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/mstflint/mstflint $(DESTDIR)/$(prefix)/bin
	
install_perftest:	install_libibverbs install_librdmacm
	# Copy binaries
	install -d $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_rdma_lat $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_rdma_bw $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_write_lat $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_write_bw $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_send_lat $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_send_bw $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_read_lat $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_read_bw $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_write_bw_postlist $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/runme $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_clock_test $(DESTDIR)/$(prefix)/bin
		
install_srptools:
	$(MAKE) -C $(SRC)userspace/srptools install
		
install_ipoibtools:
	install -d $(DESTDIR)/$(prefix)/bin
	install -d $(DESTDIR)/$(prefix)/utils
	install -m 0755 $(SRC)userspace/ipoibtools/arpingib $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/ipoibtools/mcasthandle $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/ipoibtools/iproute2/ip/ip $(DESTDIR)/$(prefix)/utils
	install -m 0755 $(SRC)userspace/ipoibtools/ipoib_ha.pl $(DESTDIR)/$(prefix)/bin
	sed -i -e "s@/sbin/ip @$(prefix)/utils/ip @g" $(DESTDIR)/$(prefix)/bin/ipoib_ha.pl

install_tvflash:
	$(MAKE) -C $(SRC)userspace/tvflash install

install_dapl:   install_libibverbs install_librdmacm
	$(MAKE) -C $(SRC)userspace/dapl install

install_mpi:
	@echo

clean: clean_user clean_kernel

clean_kernel:
	$(MAKE) -C $(KSRC) SUBDIRS="$(CWD)/drivers/infiniband" KERNELRELEASE=$(KVERSION) EXTRAVERSION=$(EXTRAVERSION) $(WITH_MAKE_PARAMS) clean

clean_user:
	$(MAKE) -C $(SRC)userspace/libibverbs clean
	$(MAKE) -C $(SRC)userspace/libmthca clean
	$(MAKE) -C $(SRC)userspace/libipathverbs clean
	$(MAKE) -C $(SRC)userspace/libehca clean
	$(MAKE) -C $(SRC)userspace/libibcm clean
	# $(MAKE) -C $(SRC)userspace/useraccess-lib clean
	$(MAKE) -C $(SRC)userspace/perftest clean
	$(MAKE) -C $(SRC)userspace/srptools clean
	$(MAKE) -C $(SRC)userspace/ipoibtools clean
	$(MAKE) -C $(SRC)userspace/tvflash clean
	$(MAKE) -C $(SRC)userspace/mstflint clean
	$(MAKE) -C $(SRC)userspace/libsdp clean
	$(MAKE) -C $(SRC)userspace/librdmacm clean
	$(MAKE) -C $(SRC)userspace/management/libibcommon clean
	$(MAKE) -C $(SRC)userspace/management/libibumad clean
	$(MAKE) -C $(SRC)userspace/management/libibmad clean
	$(MAKE) -C $(SRC)userspace/management/osm clean
	$(MAKE) -C $(SRC)userspace/management/diags clean
	$(MAKE) -C $(SRC)userspace/dapl clean

uninstall:

	if [ -f $(DESTDIR)/$(prefix)/backup/infiniband-$(KVERSION).tgz ]; then \
		rm -rf $(DESTDIR)/$(MODULES_DIR)/source/drivers/infiniband; \
		tar xzfP $(DESTDIR)/$(prefix)/backup/infiniband-$(KVERSION).tgz; \
		/bin/rm -f $(DESTDIR)/$(prefix)/backup/infiniband-$(KVERSION).tgz; \
	fi
	
	if [ -f $(DESTDIR)/$(prefix)/backup/infiniband_ko-$(KVERSION).tgz ]; then \
		rm -rf $(DESTDIR)/$(MODULES_DIR)/kernel/drivers/infiniband; \
		tar xzfP $(DESTDIR)/$(prefix)/backup/infiniband_ko-$(KVERSION).tgz; \
		/bin/rm -f $(DESTDIR)/$(prefix)/backup/infiniband_ko-$(KVERSION).tgz; \
	fi
	
	if [ -f $(DESTDIR)/$(prefix)/backup/rdma-$(KVERSION).tgz ]; then \
		rm -rf $(DESTDIR)/$(MODULES_DIR)/source/include/rdma; \
		tar xzfP $(DESTDIR)/$(prefix)/backup/rdma-$(KVERSION).tgz; \
		/bin/rm -f $(DESTDIR)/$(prefix)/backup/rdma-$(KVERSION).tgz; \
	fi
	
	if [ -f $(DESTDIR)/$(prefix)/backup/srp-$(KVERSION).h ]; then \
		rm -rf $(DESTDIR)/$(MODULES_DIR)/source/include/scsi/srp.h; \
		mv $(DESTDIR)/$(prefix)/backup/srp-$(KVERSION).h $(DESTDIR)/$(MODULES_DIR)/source/include/scsi/srp.h; \
	fi

	$(DEPMOD) -r -ae $(KVERSION)

	# Delete binaries
	-rm -f $(DESTDIR)/$(prefix)/bin/mwrite
	-rm -f $(DESTDIR)/$(prefix)/bin/mread
	-rm -f $(DESTDIR)/$(prefix)/bin/mstflint
	
	-rm -f $(DESTDIR)/$(prefix)/bin/ib_rdma_lat
	-rm -f $(DESTDIR)/$(prefix)/bin/ib_rdma_bw
	-rm -f $(DESTDIR)/$(prefix)/bin/ib_write_lat
	-rm -f $(DESTDIR)/$(prefix)/bin/ib_write_bw
	-rm -f $(DESTDIR)/$(prefix)/bin/ib_send_lat
	-rm -f $(DESTDIR)/$(prefix)/bin/ib_send_bw
	-rm -f $(DESTDIR)/$(prefix)/bin/ib_read_lat
	-rm -f $(DESTDIR)/$(prefix)/bin/ib_read_bw
	-rm -f $(DESTDIR)/$(prefix)/bin/runme
	-rm -f $(DESTDIR)/$(prefix)/bin/ib_write_bw_postlist
	-rm -f $(DESTDIR)/$(prefix)/bin/ib_clock_test
	-rm -f $(DESTDIR)/$(prefix)/bin/arpingib
	-rm -f $(DESTDIR)/$(prefix)/bin/mcasthandle
	-rm -f $(DESTDIR)/$(prefix)/bin/ipoib_ha.pl


help:
	@echo
	@echo user: 		build userpspace
	@echo kernel: 		build kernel modules
	@echo all: 		build userspace and kernel modules
	@echo
	@echo install_user:	install userspace binaries under prefix
	@echo install_kernel:	install kernel modules under $(DESTDIR)/$(MODULES_DIR)
	@echo install_modules:	install kernel modules under $(DESTDIR)/$(MODULES_DIR)
	@echo copy_kernel:	copy IB kernel sources under $(DESTDIR)/lib/modules/$(KVERSION)/source/drivers/infiniband
	@echo install:		run install_user and install_kernel
	@echo
	@echo clean:		delete kernel modules and userspace binaries
	@echo clean_kernel:	delete kernel modules binaries
	@echo clean_user:	delete userspace binaries
	@echo uninstall:	delete installed environment
	@echo
